Configuring an application correctly can be a time consuming and labor intensive manual process. Correctly configuring the application may require a human to make configuration settings using a graphical user interface (GUI), where a slight mistake could cause the application to malfunction. Some applications are very complex to configure because the applications may involve several tiers. A tier may be defined as a group of one or more servers that perform a similar function. For example, two-tier applications may involve configuring a web server and a database server. A three-tier application might involve configuring a web server, an application server, and a database server. Each tier may include multiple machines in order to handle load balancing and machine failover.
Each server may require at least some manual configuration and dramatically increase the complexity and likelihood for introducing configuration errors. A typical enterprise application, such as a Customer Relationship Management (CRM) application or an Enterprise Resource Planning (ERP) application can take days or weeks to install and configure.
One of the difficulties of configuration involves the tier-to-machine mapping. During development, all tiers may be mapped to the same physical machine to save on hardware costs. In this typical configuration, all of the applications used in each tier may be installed on the same physical machine. In contrast, in a production configuration, each tier may be mapped to one or more physical machines to maximize scalability and reliability. In this typical production configuration, the applications in each tier may be installed only on each machine that belongs to that tier. Thus each machine has a different configuration.
Virtualization technology has alleviated some of the configuration problems associated with some types of these complex applications. Virtual machines use a hardware emulation layer so that multiple operating systems may execute simultaneously on the same physical hardware, because the hardware emulation layer makes the physical hardware appear as dedicated hardware to each of the operating systems.
A virtual machine may be booted from an image file. An image file may be an image of software installed in a computer system that may include an operating system and various applications. Sometimes, an image file of software installed in a computer system for a particular purpose is known as a virtual appliance. For example, the software in a particular tier for a given application may be installed in a computer system. An image file created from that computer system may be called a virtual appliance. The image file may subsequently be used to boot virtual machines belonging to that tier.
In the typical developer configuration, a virtual machine for each tier could boot on the same physical machine, each virtual machine booting from a different image file. Alternatively, in a production environment, multiple virtual machines for a given tier may boot from the same image file. Each virtual machine may run on a separate physical machine.
Although an image file may include a set of preinstalled software, further configuration of that software or the installation of additional components is often left for the user to complete manually. One reason for this is that some information used to configure a machine is not known at the time the image file was created. For example, network settings may only be known after booting a virtual machine from an image file in the target configuration. Generally, if an application requires using multiple virtual machines, the booted virtual machines must be, at least to some extent, manually configured.